Function.prototype.myApply = function(context) {
  const ctx = context || window
  //最重要的一步，1.myApply内部的this是指向调用者fn函数的。2.ctx.func就是fn函数，ctx调用了fn函数，因此fn函数内部的this指向ctx
  ctx.func = this
  let result = arguments[1] ? ctx.func([...arguments[1]]) : ctx.func()
  delete ctx.func
  return result
}

obj = {c: 2}

function a(x, y) {
  console.log(this, x, y)
}

a.apply(obj, [1, 2])//{c:2} 1 2
a.myApply(obj, [1, 2])//{c:2,func:[function a]} 1 2
